package cm.java.jpa.inicial.test;

import cm.java.jpa.inicial.Livro;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.validation.ConstraintViolationException;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;



public class LivroTesteIntegrado {
    
     private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("cmJavaJPATeste");
     
     private EntityManager em;
     private EntityTransaction tx;
     
    @Before
    public void iniciaGerenciadorEntidades() throws Exception {
        em = emf.createEntityManager();
        tx = em.getTransaction();
    }

    @After
    public void encerraGerenciadorEntidades() throws Exception {
        if (em != null) {
            em.close();
        }
    }
    @Test
    public void deveriaEncontrarLivro() throws Exception{
        Livro livro = em.find(Livro.class, 2000);
           assertEquals("Harry Potter", livro.getTitle());
    }
    
       @Test
    public void deveriaEncontrarLivroHarry() throws Exception {
        Livro livro = em.find(Livro.class, 2001);
        assertEquals("Harry Potter2", livro.getTitle());
    }

    @Test
    public void deveriaCriarLivroHarry() throws Exception {
        Livro livro = new Livro(null, "Harry Potter");
        tx.begin();
        em.persist(livro);
        tx.commit();

        assertNotNull("HAHAHAHAHAHHAHAHAH", livro.getId());

        livro = em.createNamedQuery("encontreLivroHarry", Livro.class).getSingleResult();
        assertEquals("Harry Potter", livro.getTitle());
    }

    @Test(expected = ConstraintViolationException.class)
    public void deveriaDarExcecaoViolacaoConstraint() {
        Livro livro = new Livro(null, "Harry Potter");
        em.persist(livro);
    }
    
     
}
